package source.Objetos 
{
    import net.flashpunk.graphics.Image;
    import source.Assets;
    import source.Global;
	
	public class PlatMovil extends Physics {
		public var sprite:Image = new Image(Assets.OBJ_PLATMOVIL);
		
		public var direccion:Boolean = false; //0: horizontal; 1: vertical
		public var sentido:Boolean = false; //0: negativo; 1: positivo
		public var movimiento:Number; //la velocidad de la plataforma, llamada 'movimiento' para no confundirla con la velocidad de la clase Physics
		public var acarrear:Array = new Array("Solid", "PJ"); //los tipos de entidad que puede acarrear
		
		public function PlatMovil(x:int, y:int, _direccion:String, _sentido:String, _movimiento:String) {
			super(x, y);
			
			//configuramos el grafico y el hitbox:
			graphic = sprite;
			type = "Solid";
			setHitbox(36, 16, -7, 0);
			
			//dirección y sentido (convertimos string a boolean):
			if (_direccion == "False")
				direccion = false;
			else if (_direccion == "True")
				direccion = true;
			if (_sentido == "False")
				sentido = false;
			else if (_sentido == "True")
				sentido = true;
			
			movimiento = Number(_movimiento); //guardamos la velocidad
		}
		
		override public function update():void {
			//la movemos en la dirección correcta:
			if (direccion) speed.y = sentido ? movimiento : - movimiento;
			else           speed.x = sentido ? movimiento : - movimiento;
			
			//movemos todas las entidades que es capaz de acarrear que se encuentren sobre ella, salvo si es el pj y está muerto:
			for each(var i:String in acarrear) {
				if (!((i == "PJ") && (Global.pj.muerto))) {
					if (direccion) moveontop(i, direccion, speed.y);
					else           moveontop(i, direccion, speed.x);
				}
			}

			motion(); //la hacemos moverse
			
			//si nos hemos detenido (al chocar contra una pared, por ejemplo), conmutamos el sentido de movimiento:
			if ((speed.y == 0) && direccion)       sentido = !sentido;
			else if ((speed.x == 0) && !direccion) sentido = !sentido;
		}	
	}
}

/* Notas que a lo mejor ayudan para el funcionamiento por nodos:

Propiedad:
    public var movimiento:LinearPath = new LinearPath(finMovimiento);
    
Operaciones a realizar en el constructor:
    //añadimos la ruta que debe seguir, según los nodos definidos desde el Ogmo Editor:
    velocidad = _velocidad;
    if (velocidad) {
        addTween(movimiento);
        movimiento.addPoint(x, y);
        for (i = 0; i < _ruta.length; i++)
            movimiento.addPoint(_ruta[i].x, _ruta[i].y);
        movimiento.addPoint(x, y);
        movimiento.setMotionSpeed(velocidad);
    }
    
Método:
    //Se llama a este método cuando el movimiento del NPC ha terminado:
    public function finMovimiento():void {
        movimiento.setMotionSpeed(velocidad);
    }

*/